package cn.tedu.csmall.server.service.impl; 
 /*
 @Time: 2022/8/25 16:42
 @Author:GShuai
 @File:AttributeServiceImpl.class
 @Software:IntelliJ IDEA
*/

import cn.tedu.csmall.server.ex.ServiceException;
import cn.tedu.csmall.server.mapper.AttributeMapper;
import cn.tedu.csmall.server.pojo.dto.AttributeAddNewDTO;
import cn.tedu.csmall.server.pojo.eneity.Attribute;
import cn.tedu.csmall.server.pojo.vo.AttributeDetailVO;
import cn.tedu.csmall.server.pojo.vo.AttributeListItemVO;
import cn.tedu.csmall.server.repo.IAttributeRepository;
import cn.tedu.csmall.server.service.IAttributeService;
import cn.tedu.csmall.server.web.ServiceCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
@Slf4j
@Service
public class AttributeServiceImpl implements IAttributeService {
    @Autowired
    private IAttributeRepository attributeRepository;
    @Autowired
    private AttributeMapper attributeMapper;

    public AttributeServiceImpl() {
        log.debug("创建业务逻辑对象：AttributeServiceImpl");
    }

    @Override
    public void addNew(AttributeAddNewDTO attributeAddNewDTO) {
        log.debug("开始处理添加属性的业务，参数：{}", attributeAddNewDTO);

        // 创建实体对象（Mapper的方法的参数是实体类型）
        Attribute attribute = new Attribute();

        // 将当前方法参数的值复制到Brand实体类型的对象中
        BeanUtils.copyProperties(attributeAddNewDTO, attribute);

        // 将属性数据写入到数据库中
        log.debug("即将向表中写入数据：{}", attribute);
        int rows = attributeMapper.insert(attribute);
        if (rows != 1) {
            String message = "添加属性失败，服务器忙，请稍后再次尝试！";
            log.error(message);
            throw new ServiceException(ServiceCode.ERR_INSERT, message);
        }
    }

    @Override
    public void deleteById(Long id) {
        log.debug("开始处理删除属性的业务，id={}", id);
        // 根据id查询数据
        AttributeDetailVO queryResult = attributeMapper.getById(id);
        // 判断查询结果是否为null
        if (queryResult == null) {
            // 抛出异常
            String message = "删除属性失败，尝试删除的数据（id=" + id + "）不存在！";
            log.error(message);
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND, message);
        }

        // 调用mapper对象执行删除，并获取返回值
        int rows = attributeMapper.deleteById(id);
        // 判断返回值是否不为1
        if (rows != 1) {
            // 抛出异常
            String message = "删除属性失败，服务器忙，请稍后再次尝试！";
            log.error(message);
            throw new ServiceException(ServiceCode.ERR_DELETE, message);
        }
    }

    @Override
    public List<AttributeListItemVO> list() {
        log.debug("开始处理查询属性列表的业务");
        return attributeMapper.list();
    }
}
